package cn.topcodes.tcsf.admin.scheduling;

import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.SchedulerException;
import org.quartz.SchedulerListener;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TaskSchedulerListener implements SchedulerListener {

	private static Logger logger = LoggerFactory.getLogger(TaskSchedulerListener.class);

	/**
	 * 有新的JobDetail部署调用这个方法。
	 */
	@Override
	public void jobScheduled(Trigger trigger) {
		logger.info("加入新任务 " + trigger.getJobKey().getGroup() + "-" + trigger.getJobKey().getName());
	}

	/**
	 * 卸载时调用这个方法。
	 */
	@Override
	public void jobUnscheduled(TriggerKey triggerKey) {
		logger.info("卸载任务 " + triggerKey.getGroup() + "-" + triggerKey.getName());
	}

	/**
	 * 当一个Trigger到达再也不会触发时调用这个方法。
	 */
	@Override
	public void triggerFinalized(Trigger trigger) {
		logger.info("任务调度触发器 " + trigger.getJobKey().getGroup() + "-" + trigger.getJobKey().getName() + " 完成");
	}

	/**
	 * Scheduler 调用这个方法是发生在一个Trigger被暂停时。假如是多个Trigger的话，triggerName 参数将为null。 
	 */
	@Override
	public void triggerPaused(TriggerKey triggerKey) {
		logger.info("任务调度触发器 " + triggerKey.getGroup() + "-" + triggerKey.getName() + " 暂停");
	}

	/**
	 * Scheduler 调用这个方法是发生在多个Trigger被暂停时
	 */
	@Override
	public void triggersPaused(String triggerGroup) {
		logger.info("任务调度触发器组 " + triggerGroup + " 暂停");
	}

	/**
     * Scheduler 调用这个方法是发生成一个 Trigger组从暂停中恢复时。
     */
	@Override
	public void triggerResumed(TriggerKey triggerKey) {
		logger.info("任务调度触发器 " + triggerKey.getGroup() + "-" + triggerKey.getName() + " 恢复");
	}

	/**
	 * Scheduler 调用这个方法是发生成多个 Trigger组从暂停中恢复时。
	 */
	@Override
	public void triggersResumed(String triggerGroup) {
		logger.info("任务调度触发器组 " + triggerGroup + " 恢复");
	}

	/**
	 * 执行 新增 任务
	 */
	@Override
	public void jobAdded(JobDetail jobDetail) {
		logger.info("任务 " + jobDetail.getKey().getGroup() + "-" + jobDetail.getKey().getName() + " 已加入");
	}

	/**
	 * 任务被删除
	 */
	@Override
	public void jobDeleted(JobKey jobKey) {
		logger.info("任务 " + jobKey.getGroup() + "-" + jobKey.getName() + " 已删除");
	}

	/**
	 * 任务被暂停
	 */
	@Override
	public void jobPaused(JobKey jobKey) {
		logger.info("任务 " + jobKey.getGroup() + "-" + jobKey.getName() + " 暂停执行");
	}

	/**
	 * 任务组被暂停
	 */
	@Override
	public void jobsPaused(String jobGroup) {
		logger.info("任务组 " + jobGroup + " 暂停执行");
	}

	/**
	 * 任务被恢复执行
	 */
	@Override
	public void jobResumed(JobKey jobKey) {
		logger.info("任务 " + jobKey.getGroup() + "-" + jobKey.getName() + " 恢复执行");
	}

	/**
	 * 任务组恢复执行
	 */
	@Override
	public void jobsResumed(String jobGroup) {
		logger.info("任务组 " + jobGroup + " 恢复执行");
	}

	@Override
	public void schedulerError(String msg, SchedulerException cause) {
		logger.error("任务调度发生错误" + msg, cause);
	}

	@Override
	public void schedulerInStandbyMode() {
		logger.info("任务调度器进入冷备模式");
	}

	/**
	 * scheduler 启动后
	 */
	@Override
	public void schedulerStarted() {
		logger.info("任务调度器启动成功");
	}

	/**
	 * scheduler 启动中
	 */
	@Override
	public void schedulerStarting() {
		logger.info("任务调度器正在启动..");
	}

	/**
	 * scheduler 被关闭
	 */
	@Override
	public void schedulerShutdown() {
		logger.info("任务调度器已停止");
	}

	@Override
	public void schedulerShuttingdown() {
		logger.info("任务调度器正在停止..");
	}

	@Override
	public void schedulingDataCleared() {
		logger.info("任务调度数据已清理");
	}

}
